二、Qt+windows API驱动USB设备

您所在的位置:网站首页 windows api usb 读写 二、Qt+windows API驱动USB设备

二、Qt+windows API驱动USB设备

2024-07-11 11:23| 来源: 网络整理| 查看: 265

上一章介绍了如何获取USB设备信息列表。如果你详细阅读过上一篇的代码后,会发现,如果我们有同时使用两种同类型的设备,很难过滤出来,这时候我们就需要用到本章介绍的方法——热插拔获取对应USB设备信息

以下内容来自网络,未找到出处,等确定出处,改成转载。 逐行注释的版本丢了,不明白的地方可以google一下

原理是通过Qt窗口自带的消息机制过滤设备注册消息进行处理

.h #include #include .cpp //注册设备 void Dialog::registerDevice() { const GUID GUID_DEVINTERFACE_LIST[] = { { 0xA5DCBF10, 0x6530, 0x11D2, { 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } }, //USB设备的GUID { 0x53f56307, 0xb6bf, 0x11d0, { 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b } } }; HDEVNOTIFY hDevNotify; DEV_BROADCAST_DEVICEINTERFACE NotifacationFiler; ZeroMemory(&NotifacationFiler,sizeof(DEV_BROADCAST_DEVICEINTERFACE)); NotifacationFiler.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE); NotifacationFiler.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; for (int i = 0; i winId(), &NotifacationFiler, DEVICE_NOTIFY_WINDOW_HANDLE); if (!hDevNotify) { qDebug() lParam; switch (msg->wParam) { case DBT_DEVICEARRIVAL: { if (DBT_DEVTYP_VOLUME == lpdb->dbch_devicetype) { PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb; if (0 == lpdbv->dbcv_flags) { //优盘 QString USBDisk = QString(this->firstDriveFromMask(lpdbv ->dbcv_unitmask)); ui->labelShowMsg->setText(QString(QStringLiteral("已检测到USB设备插入--盘符:")).arg(USBDisk)); } else if (DBTF_MEDIA == lpdbv->dbcv_flags) { qDebug() dbcc_name); qDebug() dbcv_flags) { ui->labelShowMsg->setText(QString(QStringLiteral("USB设备已拔出!"))); QTimer::singleShot(1000, ui->labelShowMsg, SLOT(clear())); } if (DBTF_MEDIA == lpdbv->dbcv_flags) { ui->labelShowMsg->setText("CD_Removed."); } } } break; } } return false; } void Dialog::display() { if (m_usbInfoList.count() >= 6) { ui->lineEditVid->setText(m_usbInfoList.at(0)); ui->lineEditPid->setText(m_usbInfoList.at(1)); ui->lineEditSerialNum->setText(m_usbInfoList.at(2)); ui->lineEditProduct->setText(m_usbInfoList.at(3)); ui->lineEditVendorID->setText(m_usbInfoList.at(4)); ui->lineEditProductVersion->setText(m_usbInfoList.at(5)); } else { ui->lineEditVid->setText(m_usbInfoList.at(0)); ui->lineEditPid->setText(m_usbInfoList.at(1)); ui->lineEditSerialNum->setText(m_usbInfoList.at(2)); } } char Dialog::firstDriveFromMask(ULONG unitmask) { char i; for (i = 0; i > 1; } return (i + 'A'); } 设备拔下插入输出内容 "\\\\?\\USB#VID_258A&PID_1007#5&21cd2d89&0&3#{a5dcbf10-6530-11d2-901f-00c04fb951ed}"

![在这里插入图片描述](https://img-blog.csdnimg.cn/51164af8531e48b382b9e41a0a7e56f9.png



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3